#include "iostream"

using namespace std;

int main(){
	// 1.定义指针
    int a = 10;
    //指针定义的语法：数据类型*变量名
    int *p;
    //让指针记录变量a的地址
    p = &a;
    cout << "a的地址为：" << &a << endl;
    cout << "指针p为：" << p << endl;
	// 2.使用指针
	//可以通过解引用的方式来找到指针指向的内存中的数据
    *p = 1000;
    cout << "a=" << a << endl;
    cout << "*p=" << *p << endl;

    //指针所占用的内存空间（在32位操作系统下：4个字节  64位则是8个字节）
    int a1 = 10;
    int *p1 = &a1;
    cout << "sizeof(int*)=" << sizeof(p) << " " << sizeof(int*) << endl;
    cout << "sizeof(float*)=" << sizeof(p) << " " << sizeof(float*) << endl;
    cout << "sizeof(double*)=" << sizeof(p) << " " << sizeof(double*) << endl;
    cout << "sizeof(char*)=" << sizeof(p) << " " << sizeof(char*) << endl;
    
    //空指针和野指针
    //空指针：指针变量指向内存中编号为0的内存
    //用途：初始化指针变量
    //空指针指向的内存是不可以访问的
    int *p2 = NULL; //指针变量p指向内存地址编号为0的空间
    //*p2 = 100; //访问空指针报错
    //内存编号0～255为系统占用内存，不允许用户访问
    cout << "*p2 =" << *p2 << endl;

    //野指针：指针变量指向非法的内存空间
    //在程序中，尽量避免出现野指针
    int *p3 = (int*)0x1100;
    cout << "*p3 =" << *p3 << endl;

	system("pause");
	return 0;
}
